﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using WpfApplication2.Helpers;
using System.Windows.Controls;
using System.Collections.ObjectModel;
using WpfApplication2.SindicatoWebService;
using System.Windows;
using WpfApplication2.UserControls;
using System.Globalization;
using WpfApplication2.Validation;
using System.Reflection;
using System.ComponentModel;
using WpfApplication2.Views;
using WpfApplication2.Views.Nomenclador;


using WpfApplication2.Views.Afiliado;
using WpfApplication2.Views.TipoOrden;

namespace WpfApplication2.ViewModels.Nomenclador
{
    class ConsultarNomencladorViewModel : ViewModel

    {
         public Service1SoapClient WS;
         public Instancias Instancias { get; set; }
        #region properties
  
        public NomencladorDTO NomenAux
        {
            get
            {
                return nomenAux;
            }
            set
            {
                if (nomenAux != value)
                {
                    nomenAux = value;
                    RaisePropertyChanged("NomenAux");
                }
            }
        }
        private NomencladorDTO nomenAux;
        public NomencladorDTO Nomenclador
        {
            get
            {
                return nomenclador;
            }
            set
            {
                if (nomenclador != value)
                {
                    nomenclador = value;
                    RaisePropertyChanged("Nomenclador");
                }
            }
        }
        private NomencladorDTO nomenclador;
       
        public string CodigoNom
        {
            get
            {
                return codigoNom;
            }
            set
            {
                if (codigoNom != value)
                {
                    codigoNom = value;
                    RaisePropertyChanged("CodigoNom");
                }
            }
        }
        private string codigoNom;
        public string Descrip
        {
            get
            {
                return descrip;
            }
            set
            {
                if (descrip != value)
                {
                    descrip = value;
                    RaisePropertyChanged("Descrip");
                }
            }
        }
        private string descrip;
        public String Prueba
        {
            get
            {
                return prueba;
            }
            set
            {
                if (prueba != value)
                {
                    prueba = value;
                    RaisePropertyChanged("Prueba");
                }
            }
        }
        private String prueba;
        public PropertyElement CodigoNomP
        {
            get
            {
                return codigoNomP;
            }
            set
            {
                if (codigoNomP != value)
                {
                    codigoNomP = value;
                    RaisePropertyChanged("CodigoNomP");
                }
            }
        }
        private PropertyElement codigoNomP;
        public PropertyElement Descripcion
        {
            get
            {
                return descripcion;
            }
            set
            {
                if (descripcion != value)
                {
                    descripcion = value;
                    RaisePropertyChanged("Descripcion");
                }
            }
        }
        private PropertyElement descripcion;
        public PropertyElement Letra
        {
            get
            {
                return letra;
            }
            set
            {
                if (letra != value)
                {
                    letra = value;
                    RaisePropertyChanged("Letra");
                }
            }
        }
        private PropertyElement letra;
        public PropertyElement Galeno
        {
            get
            {
                return galeno;
            }
            set
            {
                if (galeno != value)
                {
                    galeno = value;
                    RaisePropertyChanged("Galeno");
                }
            }
        }
        private PropertyElement galeno;
        public PropertyElement Especialista
        {
            get
            {
                return especialista;
            }
            set
            {
                if (especialista != value)
                {
                    especialista = value;
                    RaisePropertyChanged("Especialista");
                }
            }
        }
        private PropertyElement especialista;
        public PropertyElement Ayudante1
        {
            get
            {
                return ayudante1;
            }
            set
            {
                if (ayudante1 != value)
                {
                    ayudante1 = value;
                    RaisePropertyChanged("Ayudante1");
                }
            }
        }
        private PropertyElement ayudante1;
        public PropertyElement Ayudante2
        {
            get
            {
                return ayudante2;
            }
            set
            {
                if (ayudante2 != value)
                {
                    ayudante2 = value;
                    RaisePropertyChanged("Ayudante2");
                }
            }
        }
        private PropertyElement ayudante2;
        public PropertyElement Ayudante3
        {
            get
            {
                return ayudante3;
            }
            set
            {
                if (ayudante3 != value)
                {
                    ayudante3 = value;
                    RaisePropertyChanged("Ayudante3");
                }
            }
        }
        private PropertyElement ayudante3;
        public PropertyElement Anestesista
        {
            get
            {
                return anestesista;
            }
            set
            {
                if (anestesista != value)
                {
                    anestesista = value;
                    RaisePropertyChanged("Anestesista");
                }
            }
        }
        private PropertyElement anestesista;
        public PropertyElement Gastos
        {
            get
            {
                return gastos;
            }
            set
            {
                if (gastos != value)
                {
                    gastos = value;
                    RaisePropertyChanged("Gastos");
                }
            }
        }
        private PropertyElement gastos;
        public PropertyElement CodAnterior
        {
            get
            {
                return codAnterior;
            }
            set
            {
                if (codAnterior != value)
                {
                    codAnterior = value;
                    RaisePropertyChanged("CodAnterior");
                }
            }
        }
        private PropertyElement codAnterior;
        public NomencladorDTO[] Resultados
        {
            get
            {
                return resultados;
            }
            set
            {
                if (resultados != value)
                {
                    resultados = value;
                    RaisePropertyChanged("Resultados");
                }
            }
        }
        private NomencladorDTO[] resultados;
        public NomencladorDTO[] Resultados1
        {
            get
            {
                return resultados1;
            }
            set
            {
                if (resultados1 != value)
                {
                    resultados1 = value;
                    RaisePropertyChanged("Resultados1");
                }
            }
        }
        private NomencladorDTO[] resultados1;
        

        #region Visible 


        public Visibility   ResultsVisibility
        {
            get
            {
                return resultsVisibility;
            }
            set
            {
                if (resultsVisibility != value)
                {
                    resultsVisibility = value;
                    RaisePropertyChanged("ResultsVisibility");
                }
            }
        }
        private Visibility resultsVisibility;

        public Visibility ResultsVisibility1
        {
            get
            {
                return resultsVisibility1;
            }
            set
            {
                if (resultsVisibility1 != value)
                {
                    resultsVisibility1 = value;
                    RaisePropertyChanged("ResultsVisibility1");
                }
            }
        }
        private Visibility resultsVisibility1;



        public Visibility TitulosVisibility
        {
            get
            {
                return titulosVisibility;
            }
            set
            {
                if (titulosVisibility != value)
                {
                    titulosVisibility = value;
                    RaisePropertyChanged("TitulosVisibility");
                }
            }
        }
        private Visibility titulosVisibility;

        public Visibility TitulosVisibility1
        {
            get
            {
                return titulosVisibility1;
            }
            set
            {
                if (titulosVisibility1 != value)
                {
                    titulosVisibility1 = value;
                    RaisePropertyChanged("TitulosVisibility1");
                }
            }
        }

        private Visibility titulosVisibility1;
        
        public Visibility   PanelDatosVisible
        {
            get
            {
                return panelDatosVisible;
            }
            set
            {
                if (panelDatosVisible != value)
                {
                    panelDatosVisible = value;
                    RaisePropertyChanged("PanelDatosVisible");
                }
            }
        }
        private Visibility panelDatosVisible;
        public Visibility ResultsListVisibility
        {
            get
            {
                return resultsListVisibility;
            }
            set
            {
                if (resultsListVisibility != value)
                {
                    resultsListVisibility = value;
                    RaisePropertyChanged("ResultsListVisibility");
                }
            }
        }
        private Visibility resultsListVisibility;

        public Visibility ResultsListVisibility1
        {
            get
            {
                return resultsListVisibility1;
            }
            set
            {
                if (resultsListVisibility1 != value)
                {
                    resultsListVisibility1 = value;
                    RaisePropertyChanged("ResultsListVisibility1");
                }
            }
        }
        private Visibility resultsListVisibility1;

        public Visibility NoResultsVisibility
        {
            get
            {
                return noResultsVisibility;
            }
            set
            {
                if (noResultsVisibility != value)
                {
                    noResultsVisibility = value;
                    RaisePropertyChanged("NoResultsVisibility");
                }
            }
        }
        private Visibility noResultsVisibility;
        #endregion 


        #endregion

        public ConsultarNomencladorViewModel(Instancias instancias)
        {
            WS = new Service1SoapClient();
           Instancias = instancias;
            
            ResultsVisibility = Visibility.Collapsed;
            ResultsVisibility1 = Visibility.Collapsed;
            
            PanelDatosVisible = Visibility.Collapsed;
            ResultsListVisibility = Visibility.Visible;
            ResultsListVisibility1 = Visibility.Visible;
            TitulosVisibility = Visibility.Collapsed;
            TitulosVisibility1 = Visibility.Collapsed;
            PanelDatosVisible = Visibility.Visible;
            Buscar();
          
            
        }

        private DelegateCommand buscarNomenclador;

        public ICommand BuscarNomenclador
        {
            get
            {
                if (buscarNomenclador == null)
                {
                    buscarNomenclador = new DelegateCommand(Buscar, CanExecute);
                }
                return buscarNomenclador;
            }
        }
        private bool CanExecute()
        {
            return true;
        }

        private void Buscar()
        {

            Resultados = WS.GetNomencladores();

            ResultsVisibility = Visibility.Visible;
            if (Resultados.Count() > 0)
            {
                ResultsListVisibility = Visibility.Visible;
                TitulosVisibility = Visibility.Visible;

                ResultsListVisibility1 = Visibility.Collapsed;
                PanelDatosVisible = Visibility.Collapsed;
                TitulosVisibility1 = Visibility.Collapsed;

            }
            else
            {
                // modalDialog.ShowHandlerDialog(String.Format("Debe completar al menos un campo para iniciar la búsqueda"));
                ResultsListVisibility = Visibility.Hidden;
                PanelDatosVisible = Visibility.Hidden;
            }
        }


        private DelegateCommand buscarxCodYNom;
        public ICommand BuscarxCodYNom
        {
            get
            {
                if (buscarxCodYNom == null)
                {
                    buscarxCodYNom = new DelegateCommand(BuscarxCyN, CanExecute);
                }
                return buscarxCodYNom;
            }
        }

        private void BuscarxCyN()
        {
            if ((string.IsNullOrEmpty(CodigoNom)) && (string.IsNullOrEmpty(Descrip)))
            {
                Instancias.ModalDialog.ShowHandlerDialog(String.Format("Debe completar al menos un campo para la busqueda"));
            }
            else
            {
                if (string.IsNullOrEmpty(CodigoNom))
                {
                    CodigoNom = null;
                    Resultados = WS.Nomenclador_Buscar(CodigoNom, Descrip);

                    if (Resultados != null)
                    {

                        ResultsVisibility = Visibility.Visible;
                        if (Resultados.Count() > 0)
                        {
                            ResultsListVisibility = Visibility.Visible;

                            TitulosVisibility = Visibility.Visible;
                            PanelDatosVisible = Visibility.Visible;
                        }
                    }
                    else
                    {
                        Instancias.ModalDialog.ShowHandlerDialog("No se han encontrado resultado");
                    }

                }
                else
                {

                    Resultados = WS.Nomenclador_Buscar(CodigoNom, Descrip);
                    int control = Resultados.Count();

                    if (control == 0)
                    {
                        Instancias.ModalDialog.ShowHandlerDialog(String.Format("No se han encontrado resultado"));

                    }
                    else
                    {
                        ResultsVisibility = Visibility.Visible;
                        ResultsListVisibility = Visibility.Visible;
                        TitulosVisibility = Visibility.Visible;
                        PanelDatosVisible = Visibility.Visible;
                    }
                }
            }

        }


        private DelegateCommand consultarNomenclador;

        public ICommand ConsultarNomenclador
        {
            get
            {
                if (consultarNomenclador == null)
                {
                    consultarNomenclador = new DelegateCommand(Consultar, CanExecute);
                }
                return consultarNomenclador;
            }
        }

        private void Consultar()
        {
            if (Nomenclador != null)
                Instancias.FrameContent.Content = new MostrarInfNomenclador(Instancias, Nomenclador);
            else
                Instancias.ModalDialog.ShowHandlerDialog("Debe selecccionar un Codigo.");
        }
        
    }
}
